/*
 * This file is part of Cadmium.
 * Copyright (C) 2007-2010 Xavier Clerc.
 *
 * Cadmium is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 *
 * Cadmium is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package fr.x9c.cadmium.kernel;

/**
 * List of primitive providers to get builtin primitives from. <br/>
 * These are the primitives from 'stdlib' and 'otherlibs'.
 *
 * @author <a href="mailto:cadmium@x9c.fr">Xavier Clerc</a>
 * @version 1.2
 * @since 1.0
 */
interface Libraries {

    /** Primitive providers for 'stdlib'. */
    String[] STDLIB = {
        "fr.x9c.cadmium.primitives.stdlib.Alloc",
        "fr.x9c.cadmium.primitives.stdlib.Array",
        "fr.x9c.cadmium.primitives.stdlib.BackTrace",
        "fr.x9c.cadmium.primitives.stdlib.Callback",
        "fr.x9c.cadmium.primitives.stdlib.Compare",
        "fr.x9c.cadmium.primitives.stdlib.Dynlink",
        "fr.x9c.cadmium.primitives.stdlib.Extern",
        "fr.x9c.cadmium.primitives.stdlib.Finalise",
        "fr.x9c.cadmium.primitives.stdlib.Floats",
        "fr.x9c.cadmium.primitives.stdlib.Gc_ctrl",
        "fr.x9c.cadmium.primitives.stdlib.Hash",
        "fr.x9c.cadmium.primitives.stdlib.Intern",
        "fr.x9c.cadmium.primitives.stdlib.Ints",
        "fr.x9c.cadmium.primitives.stdlib.Io",
        "fr.x9c.cadmium.primitives.stdlib.Lexing",
        "fr.x9c.cadmium.primitives.stdlib.Md5",
        "fr.x9c.cadmium.primitives.stdlib.Meta",
        "fr.x9c.cadmium.primitives.stdlib.NatDynlink",
        "fr.x9c.cadmium.primitives.stdlib.Obj",
        "fr.x9c.cadmium.primitives.stdlib.Parsing",
        "fr.x9c.cadmium.primitives.stdlib.Signals",
        "fr.x9c.cadmium.primitives.stdlib.Stacks",
        "fr.x9c.cadmium.primitives.stdlib.Str",
        "fr.x9c.cadmium.primitives.stdlib.Sys",
        "fr.x9c.cadmium.primitives.stdlib.Terminfo",
        "fr.x9c.cadmium.primitives.stdlib.Weak"
    };

    /** Primitive providers for Cadmium-specific primitives. */
    String[] CADMIUM = {
        "fr.x9c.cadmium.primitives.cadmium.Applets",
        "fr.x9c.cadmium.primitives.cadmium.Arrays",
        "fr.x9c.cadmium.primitives.cadmium.Cadmium",
        "fr.x9c.cadmium.primitives.cadmium.Classes",
        "fr.x9c.cadmium.primitives.cadmium.Constructors",
        "fr.x9c.cadmium.primitives.cadmium.CreateInterface",
        "fr.x9c.cadmium.primitives.cadmium.Fields",
        "fr.x9c.cadmium.primitives.cadmium.Methods",
        "fr.x9c.cadmium.primitives.cadmium.Objects",
        "fr.x9c.cadmium.primitives.cadmium.Proxies",
        "fr.x9c.cadmium.primitives.cadmium.Runtime"
    };

    /** Primitive providers for Cadmium JDBC primitives. */
    String[] CADMIUM_JDBC = {
        "fr.x9c.cadmium.primitives.cadmiumjdbc.Arrays",
        "fr.x9c.cadmium.primitives.cadmiumjdbc.Blobs",
        "fr.x9c.cadmium.primitives.cadmiumjdbc.CallableStatements",
        "fr.x9c.cadmium.primitives.cadmiumjdbc.Clobs",
        "fr.x9c.cadmium.primitives.cadmiumjdbc.Connections",
        "fr.x9c.cadmium.primitives.cadmiumjdbc.DatabaseMetaDatas",
        "fr.x9c.cadmium.primitives.cadmiumjdbc.DateBase",
        "fr.x9c.cadmium.primitives.cadmiumjdbc.Dates",
        "fr.x9c.cadmium.primitives.cadmiumjdbc.DriverManagers",
        "fr.x9c.cadmium.primitives.cadmiumjdbc.Drivers",
        "fr.x9c.cadmium.primitives.cadmiumjdbc.ParameterMetaDatas",
        "fr.x9c.cadmium.primitives.cadmiumjdbc.PreparedStatements",
        "fr.x9c.cadmium.primitives.cadmiumjdbc.Refs",
        "fr.x9c.cadmium.primitives.cadmiumjdbc.ResultSetMetaDatas",
        "fr.x9c.cadmium.primitives.cadmiumjdbc.ResultSets",
        "fr.x9c.cadmium.primitives.cadmiumjdbc.RowIds",
        "fr.x9c.cadmium.primitives.cadmiumjdbc.SQLXMLs",
        "fr.x9c.cadmium.primitives.cadmiumjdbc.Savepoints",
        "fr.x9c.cadmium.primitives.cadmiumjdbc.Statements",
        "fr.x9c.cadmium.primitives.cadmiumjdbc.Structs",
        "fr.x9c.cadmium.primitives.cadmiumjdbc.Times",
        "fr.x9c.cadmium.primitives.cadmiumjdbc.Timestamps"
    };

    /** Primitive providers for Cadmium Math primitives. */
    String[] CADMIUM_MATH = {
        "fr.x9c.cadmium.primitives.cadmiummath.BigDecimals",
        "fr.x9c.cadmium.primitives.cadmiummath.BigIntegers",
        "fr.x9c.cadmium.primitives.cadmiummath.Floats",
        "fr.x9c.cadmium.primitives.cadmiummath.Randoms",
        "fr.x9c.cadmium.primitives.cadmiummath.StrictFloats"
    };

    /** Primitive providers for Cadmium XML primitives. */
    String[] CADMIUM_XML = {
        "fr.x9c.cadmium.primitives.cadmiumxml.Documents",
        "fr.x9c.cadmium.primitives.cadmiumxml.SAX",
        "fr.x9c.cadmium.primitives.cadmiumxml.Schemas",
        "fr.x9c.cadmium.primitives.cadmiumxml.Transformers",
        "fr.x9c.cadmium.primitives.cadmiumxml.Trees",
        "fr.x9c.cadmium.primitives.cadmiumxml.XPath"
    };

    /** Primitive providers for 'otherlibs/bigarray'. */
    String[] BIGARRAY = {
        "fr.x9c.cadmium.primitives.bigarray.BigArray"
    };

    /** Primitive providers for 'otherlibs/dbm'. */
    String[] DBM = {
        "fr.x9c.cadmium.primitives.dbm.Cldbm"
    };

    /** Primitive providers for 'otherlibs/graph'. */
    String[] GRAPH = {
        "fr.x9c.cadmium.primitives.graph.Color",
        "fr.x9c.cadmium.primitives.graph.Draw",
        "fr.x9c.cadmium.primitives.graph.DumpImage",
        "fr.x9c.cadmium.primitives.graph.Events",
        "fr.x9c.cadmium.primitives.graph.Fill",
        "fr.x9c.cadmium.primitives.graph.Image",
        "fr.x9c.cadmium.primitives.graph.MakeImage",
        "fr.x9c.cadmium.primitives.graph.Open",
        "fr.x9c.cadmium.primitives.graph.PointCol",
        "fr.x9c.cadmium.primitives.graph.Sound",
        "fr.x9c.cadmium.primitives.graph.SubWindow",
        "fr.x9c.cadmium.primitives.graph.Text"
    };

    /** Primitive providers for 'otherlibs/num'. */
    String[] NUM = {
        "fr.x9c.cadmium.primitives.num.Nat"
    };

    /** Primitive providers for 'otherlibs/str'. */
    String[] STR = {
        "fr.x9c.cadmium.primitives.str.Str"
    };

    /** Primitive providers for 'otherlibs/systhreads'. */
    String[] SYSTHREADS = {
        "fr.x9c.cadmium.primitives.systhreads.Threads"
    };

    /** Primitive providers for 'otherlibs/threads'. */
    String[] THREADS = {
        "fr.x9c.cadmium.primitives.threads.Threads"
    };

    /** Primitive providers for 'otherlibs/unix'. */
    String[] UNIX = {
        "fr.x9c.cadmium.primitives.unix.Accept",
        "fr.x9c.cadmium.primitives.unix.Access",
        "fr.x9c.cadmium.primitives.unix.Addrofstr",
        "fr.x9c.cadmium.primitives.unix.Alarm",
        "fr.x9c.cadmium.primitives.unix.Bind",
        "fr.x9c.cadmium.primitives.unix.Chdir",
        "fr.x9c.cadmium.primitives.unix.Chmod",
        "fr.x9c.cadmium.primitives.unix.Chown",
        "fr.x9c.cadmium.primitives.unix.Chroot",
        "fr.x9c.cadmium.primitives.unix.Close",
        "fr.x9c.cadmium.primitives.unix.Closedir",
        "fr.x9c.cadmium.primitives.unix.Connect",
        "fr.x9c.cadmium.primitives.unix.Dup",
        "fr.x9c.cadmium.primitives.unix.Dup2",
        "fr.x9c.cadmium.primitives.unix.Envir",
        "fr.x9c.cadmium.primitives.unix.Errmsg",
        "fr.x9c.cadmium.primitives.unix.Execv",
        "fr.x9c.cadmium.primitives.unix.Execve",
        "fr.x9c.cadmium.primitives.unix.Execvp",
        "fr.x9c.cadmium.primitives.unix.Exit",
        "fr.x9c.cadmium.primitives.unix.Fchmod",
        "fr.x9c.cadmium.primitives.unix.Fchown",
        "fr.x9c.cadmium.primitives.unix.Fcntl",
        "fr.x9c.cadmium.primitives.unix.Fork",
        "fr.x9c.cadmium.primitives.unix.Ftruncate",
        "fr.x9c.cadmium.primitives.unix.Getaddrinfo",
        "fr.x9c.cadmium.primitives.unix.Getcwd",
        "fr.x9c.cadmium.primitives.unix.Getegid",
        "fr.x9c.cadmium.primitives.unix.Geteuid",
        "fr.x9c.cadmium.primitives.unix.Getgid",
        "fr.x9c.cadmium.primitives.unix.Getgr",
        "fr.x9c.cadmium.primitives.unix.Getgroups",
        "fr.x9c.cadmium.primitives.unix.Gethost",
        "fr.x9c.cadmium.primitives.unix.Gethostname",
        "fr.x9c.cadmium.primitives.unix.Getlogin",
        "fr.x9c.cadmium.primitives.unix.Getnameinfo",
        "fr.x9c.cadmium.primitives.unix.Getpeername",
        "fr.x9c.cadmium.primitives.unix.Getpid",
        "fr.x9c.cadmium.primitives.unix.Getppid",
        "fr.x9c.cadmium.primitives.unix.Getproto",
        "fr.x9c.cadmium.primitives.unix.Getpw",
        "fr.x9c.cadmium.primitives.unix.Getserv",
        "fr.x9c.cadmium.primitives.unix.Getsockname",
        "fr.x9c.cadmium.primitives.unix.Gettimeofday",
        "fr.x9c.cadmium.primitives.unix.Getuid",
        "fr.x9c.cadmium.primitives.unix.Gmtime",
        "fr.x9c.cadmium.primitives.unix.Isatty",
        "fr.x9c.cadmium.primitives.unix.Itimer",
        "fr.x9c.cadmium.primitives.unix.Kill",
        "fr.x9c.cadmium.primitives.unix.Link",
        "fr.x9c.cadmium.primitives.unix.Listen",
        "fr.x9c.cadmium.primitives.unix.Lockf",
        "fr.x9c.cadmium.primitives.unix.Lseek",
        "fr.x9c.cadmium.primitives.unix.Mkdir",
        "fr.x9c.cadmium.primitives.unix.Mkfifo",
        "fr.x9c.cadmium.primitives.unix.Nice",
        "fr.x9c.cadmium.primitives.unix.Open",
        "fr.x9c.cadmium.primitives.unix.Opendir",
        "fr.x9c.cadmium.primitives.unix.Pipe",
        "fr.x9c.cadmium.primitives.unix.Putenv",
        "fr.x9c.cadmium.primitives.unix.Read",
        "fr.x9c.cadmium.primitives.unix.Readdir",
        "fr.x9c.cadmium.primitives.unix.Readlink",
        "fr.x9c.cadmium.primitives.unix.Rename",
        "fr.x9c.cadmium.primitives.unix.Rewinddir",
        "fr.x9c.cadmium.primitives.unix.Rmdir",
        "fr.x9c.cadmium.primitives.unix.Select",
        "fr.x9c.cadmium.primitives.unix.Sendrecv",
        "fr.x9c.cadmium.primitives.unix.Setgid",
        "fr.x9c.cadmium.primitives.unix.Setsid",
        "fr.x9c.cadmium.primitives.unix.Setuid",
        "fr.x9c.cadmium.primitives.unix.Shutdown",
        "fr.x9c.cadmium.primitives.unix.Signals",
        "fr.x9c.cadmium.primitives.unix.Sleep",
        "fr.x9c.cadmium.primitives.unix.Socket",
        "fr.x9c.cadmium.primitives.unix.Socketpair",
        "fr.x9c.cadmium.primitives.unix.Sockopt",
        "fr.x9c.cadmium.primitives.unix.Stat",
        "fr.x9c.cadmium.primitives.unix.Strofaddr",
        "fr.x9c.cadmium.primitives.unix.Symlink",
        "fr.x9c.cadmium.primitives.unix.Termios",
        "fr.x9c.cadmium.primitives.unix.Time",
        "fr.x9c.cadmium.primitives.unix.Times",
        "fr.x9c.cadmium.primitives.unix.Truncate",
        "fr.x9c.cadmium.primitives.unix.Umask",
        "fr.x9c.cadmium.primitives.unix.Unlink",
        "fr.x9c.cadmium.primitives.unix.Utimes",
        "fr.x9c.cadmium.primitives.unix.Wait",
        "fr.x9c.cadmium.primitives.unix.Write"
    };

    /** Primitive providers for 'camlzip'. */
    String[] CAMLZIP = {
        "fr.x9c.cadmium.primitives.zip.Zlib"
    };
    
    String[] MTASC = {
        "fr.x9c.cadmium.primitives.mtasc.STuff"
    };

    /** List of primive providers lists packaged with Cadmium. */
    String[][] ALL_LIBRARIES = {
        Libraries.STDLIB,
        Libraries.CADMIUM,
        Libraries.CADMIUM_JDBC,
        Libraries.CADMIUM_MATH,
        Libraries.CADMIUM_XML,
        Libraries.BIGARRAY,
        Libraries.DBM,
        Libraries.GRAPH,
        Libraries.NUM,
        Libraries.STR,
        Libraries.SYSTHREADS,
        Libraries.THREADS,
        Libraries.UNIX,
        Libraries.CAMLZIP,
        Libraries.MTASC
    };

} // end interface 'Libraries'
